Upgrade combine to 4.6.6 This project was upgraded with external_updater. Usage: tools/external_updater/updater.sh update rust/crates/combine For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md Test: TreeHugger Change-Id: I37570a8cfa0934a4772aecd0b28596e51d5cbf23
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index 458621b..eacdbba 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json
@@ -1,6 +1,6 @@ { "git": { - "sha1": "50a71afa1c88e8564e0220a6e0625dd16a2302a2" + "sha1": "cbc33e72627eac452806240d4bdb948465a4cbe1" }, "path_in_vcs": "" } \ No newline at end of file
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 94b0ed9..807ab87 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml
@@ -22,7 +22,26 @@ steps: - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + - name: Build run: cargo build + + - name: Check 1.40 + if: ${{ matrix.rust == '1.40.0' }} + run: | + cargo "$@" check + cargo "$@" check --no-default-features + - name: Run tests + if: ${{ matrix.rust != '1.40.0' }} run: ./ci.sh + + - name: Check docs + if: ${{ matrix.rust == 'stable' }} + run: cargo doc
diff --git a/Android.bp b/Android.bp index 1f6df66..36a347e 100644 --- a/Android.bp +++ b/Android.bp
@@ -20,11 +20,10 @@ rust_library { name: "libcombine", - // has rustc warnings host_supported: true, crate_name: "combine", cargo_env_compat: true, - cargo_pkg_version: "4.6.4", + cargo_pkg_version: "4.6.6", srcs: ["src/lib.rs"], edition: "2018", features: [
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2beecf7..a2bf60d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md
@@ -1,3 +1,10 @@ +<a name="v4.6.5"></a> +### v4.6.5 (2022-08-09) + +* memchr: use non deprecated feature `std` instead of `use_std` + +* refactor: Extract less-generic code from sequence's add_errors (-5%) + <a name="v4.6.4"></a> ### v4.6.4 (2022-04-25)
diff --git a/Cargo.lock b/Cargo.lock.saved similarity index 99% rename from Cargo.lock rename to Cargo.lock.saved index b23775e..1900e9c 100644 --- a/Cargo.lock +++ b/Cargo.lock.saved
@@ -257,7 +257,7 @@ [[package]] name = "combine" -version = "4.6.4" +version = "4.6.6" dependencies = [ "async-std", "bytes 0.5.6",
diff --git a/Cargo.toml b/Cargo.toml index cc8ce00..b4e5996 100644 --- a/Cargo.toml +++ b/Cargo.toml
@@ -12,7 +12,7 @@ [package] edition = "2018" name = "combine" -version = "4.6.4" +version = "4.6.6" authors = ["Markus Westerlind <marwes91@gmail.com>"] description = "Fast parser combinators on arbitrary streams with zero-copy support." documentation = "https://docs.rs/combine" @@ -29,6 +29,7 @@ ] license = "MIT" repository = "https://github.com/Marwes/combine" +resolver = "1" [package.metadata.docs.rs] all-features = true @@ -108,7 +109,7 @@ package = "futures-io" [dependencies.memchr] -version = "2.2" +version = "2.3" default-features = false [dependencies.pin-project-lite] @@ -221,7 +222,7 @@ mp4 = [] pin-project = ["pin-project-lite"] std = [ - "memchr/use_std", + "memchr/std", "bytes", "alloc", ]
diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 5d31969..c301500 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@ [package] name = "combine" -version = "4.6.4" +version = "4.6.6" authors = ["Markus Westerlind <marwes91@gmail.com>"] description = "Fast parser combinators on arbitrary streams with zero-copy support." @@ -28,7 +28,7 @@ [dependencies] regex = { version = "1", optional = true } -memchr = { version = "2.2", default-features = false } +memchr = { version = "2.3", default-features = false } pin-project-lite = { version = "0.2", optional = true } # Future proofing so that tokio-0.3, tokio-0.1 etc can be supported tokio-02-dep = { version = "0.2.3", package = "tokio", features = ["io-util"], default-features = false, optional = true } @@ -64,7 +64,7 @@ tokio-03 = ["pin-project", "std", "tokio-03-dep", "futures-core-03", "pin-project-lite"] tokio = ["tokio-dep", "tokio-util/io", "futures-core-03", "pin-project-lite"] futures-03 = ["pin-project", "std", "futures-core-03", "futures-io-03", "pin-project-lite"] -std = ["memchr/use_std", "bytes", "alloc"] +std = ["memchr/std", "bytes", "alloc"] alloc = [] [[test]]
diff --git a/METADATA b/METADATA index d6be19b..6c436fc 100644 --- a/METADATA +++ b/METADATA
@@ -1,3 +1,7 @@ +# This project was upgraded with external_updater. +# Usage: tools/external_updater/updater.sh update rust/crates/combine +# For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md + name: "combine" description: "Fast parser combinators on arbitrary streams with zero-copy support." third_party { @@ -7,13 +11,13 @@ } url { type: ARCHIVE - value: "https://static.crates.io/crates/combine/combine-4.6.4.crate" + value: "https://static.crates.io/crates/combine/combine-4.6.6.crate" } - version: "4.6.4" + version: "4.6.6" license_type: NOTICE last_upgrade_date { year: 2022 - month: 6 - day: 28 + month: 12 + day: 8 } }
diff --git a/README.md b/README.md index fa68ccf..5d67f1c 100644 --- a/README.md +++ b/README.md
@@ -26,14 +26,20 @@ assert_eq!(result, Ok((Some("word".to_string()), "!"))); ``` -A tutorial as well as explanations on what goes on inside combine can be found in [the wiki](https://github.com/Marwes/combine/wiki). - Larger examples can be found in the [examples][], [tests][] and [benches][] folders. [examples]:https://github.com/Marwes/combine/tree/master/examples [tests]:https://github.com/Marwes/combine/tree/master/tests [benches]:https://github.com/Marwes/combine/tree/master/benches +## Tutorial + +A tutorial as well as explanations on what goes on inside combine can be found in [the wiki](https://github.com/Marwes/combine/wiki). + +### Translation + +[Japanese](https://github.com/sadnessOjisan/combine-ja) + ## Links [Documentation and examples](https://docs.rs/crate/combine)
diff --git a/ci.sh b/ci.sh index 6397319..c850263 100755 --- a/ci.sh +++ b/ci.sh
@@ -1,27 +1,18 @@ #!/bin/bash -x set -ex -if [[ "$TRAVIS_RUST_VERSION" == "1.40.0" ]]; then - cargo "$@" check - cargo "$@" check --no-default-features -else - cargo "$@" build - cargo "$@" test --all-features - cargo "$@" test --all-features --examples +cargo "$@" build +cargo "$@" test --all-features +cargo "$@" test --all-features --examples - cargo "$@" test --bench json --bench http -- --test - cargo "$@" check --bench mp4 --features mp4 - - cargo "$@" build --no-default-features --features alloc - cargo "$@" test --no-default-features --features alloc --examples +cargo "$@" test --bench json --bench http -- --test +cargo "$@" check --bench mp4 --features mp4 - cargo "$@" build --no-default-features - cargo "$@" test --no-default-features --examples +cargo "$@" build --no-default-features --features alloc +cargo "$@" test --no-default-features --features alloc --examples - cargo "$@" check --no-default-features --features tokio-02 - cargo "$@" check --no-default-features --features tokio-03 -fi +cargo "$@" build --no-default-features +cargo "$@" test --no-default-features --examples -if [[ "$TRAVIS_RUST_VERSION" == "stable" ]]; then - cargo doc -fi +cargo "$@" check --no-default-features --features tokio-02 +cargo "$@" check --no-default-features --features tokio-03
diff --git a/src/parser/range.rs b/src/parser/range.rs index 7b53fe6..46353eb 100644 --- a/src/parser/range.rs +++ b/src/parser/range.rs
@@ -85,7 +85,6 @@ /// assert!(parser.parse("!").is_err()); /// # } /// ``` - #[inline] pub fn recognize[Input, P](parser: P)(Input) -> <Input as StreamOnce>::Range where [ P: Parser<Input>,
diff --git a/src/parser/sequence.rs b/src/parser/sequence.rs index 1c8bdcb..166b89d 100644 --- a/src/parser/sequence.rs +++ b/src/parser/sequence.rs
@@ -14,17 +14,6 @@ ErrorOffset, Parser, Stream, StreamOnce, }; -macro_rules! dispatch_on { - ($i: expr, $f: expr;) => { - }; - ($i: expr, $f: expr; $first: ident $(, $id: ident)*) => { { - let b = $f($i, $first); - if b { - dispatch_on!($i + 1, $f; $($id),*); - } - } } -} - macro_rules! count { () => { 0 }; ($f: ident) => { 1 }; @@ -63,6 +52,37 @@ ($id: ident, $($rest: ident),+) => { last_ident!($($rest),+) }; } +fn add_sequence_error<Input>( + i: &mut usize, + first_empty_parser: usize, + inner_offset: ErrorOffset, + err: &mut Tracked<Input::Error>, + parser: &mut impl Parser<Input>, +) -> bool +where + Input: Stream, +{ + if *i + 1 == first_empty_parser { + Parser::add_committed_expected_error(parser, err); + } + if *i >= first_empty_parser { + if err.offset <= ErrorOffset(1) { + // We reached the last parser we need to add errors to (and the + // parser that actually returned the error), use the returned + // offset for that parser. + err.offset = inner_offset; + } + Parser::add_error(parser, err); + if err.offset <= ErrorOffset(1) { + return false; + } + } + err.offset = ErrorOffset(err.offset.0.saturating_sub(Parser::parser_count(parser).0)); + + *i += 1; + true +} + macro_rules! tuple_parser { ($partial_state: ident; $h: ident $(, $id: ident)*) => { #[allow(non_snake_case)] @@ -99,27 +119,20 @@ if let Ok(t) = input.uncons() { err.error.add(StreamError::unexpected_token(t)); } - dispatch_on!(0, |i, mut p| { - if i + 1 == first_empty_parser { - Parser::add_committed_expected_error(&mut p, &mut err); + + #[allow(unused_assignments)] + let mut i = 0; + loop { + if !add_sequence_error(&mut i, first_empty_parser, inner_offset, &mut err, $h) { + break; } - if i >= first_empty_parser { - if err.offset <= ErrorOffset(1) { - // We reached the last parser we need to add errors to (and the - // parser that actually returned the error), use the returned - // offset for that parser. - err.offset = inner_offset; - } - Parser::add_error(&mut p, &mut err); - if err.offset <= ErrorOffset(1) { - return false; - } + $( + if !add_sequence_error(&mut i, first_empty_parser, inner_offset, &mut err, $id) { + break; } - err.offset = ErrorOffset( - err.offset.0.saturating_sub(Parser::parser_count(&p).0) - ); - true - }; $h $(, $id)*); + )* + break; + } CommitErr(err.error) } else { PeekErr(err)
diff --git a/src/stream/mod.rs b/src/stream/mod.rs index ff9780e..b1f3d07 100644 --- a/src/stream/mod.rs +++ b/src/stream/mod.rs
@@ -1401,7 +1401,7 @@ /// }, /// |input, _position| combine::easy::Stream::from(input), /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824), /// ); /// ``` #[cfg(feature = "std")] @@ -1497,7 +1497,7 @@ /// }, /// |input, _position| combine::easy::Stream::from(input), /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824), /// ); /// } /// ``` @@ -1591,7 +1591,7 @@ /// }, /// |input, _position| combine::easy::Stream::from(input), /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824), /// ); /// } /// ``` @@ -1687,7 +1687,7 @@ /// }, /// |input, _position| combine::easy::Stream::from(input), /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824), /// ); /// } /// ``` @@ -1783,7 +1783,7 @@ /// }, /// |input, _position| combine::easy::Stream::from(input), /// ).map_err(combine::easy::Errors::<u8, &[u8], _>::from), -/// Ok(819), +/// Ok(824), /// ); /// } /// ```
diff --git a/tests/async.rs b/tests/async.rs index f5fb063..bedaa72 100644 --- a/tests/async.rs +++ b/tests/async.rs
@@ -634,7 +634,7 @@ assert_eq!(result.unwrap(), [""]); } -const WORDS_IN_README: usize = 819; +const WORDS_IN_README: usize = 824; #[test] fn decode_std() { @@ -850,5 +850,5 @@ } } } - assert_eq!(819, count); + assert_eq!(824, count); }